hong.com
Final
2025-08-06
2025-08-07
2025-08-08
2025-08-11
2025-08-12
2025-08-13
2025-08-14
2025-08-18
2025-08-19
Project
C Language
game instructions
FFT
game instructions
Study
C Language
ARM System Programming
C Programming - Challenges
C programming
Linux
Day1
Day2
Day3
Day4
Day5
Day6
Day7
Day8
SKIN_Project copy
SKIN_Project
perceptron
System Verilog
Day1
Day2
Day3
VLSI Circuits Design
Day1
Subsubcategory 1
Subsubcategory 2
example
Home
Contact
Copyright ยฉ 2024 |
Yankos
Home
>
Study
> System Verilog
๐ ๆ้ใขใค (โโขแดโขโ)โก โง*ใ
System Verilog
Day3 : Low-pass Filter
Project #1 MobaXterm Code : rrc_filter.sv // Created on 2025/07/15 by jaehong `timescale 1ns / 1ps module rrc_filter #( parameter WIDTH = 7 )( input clk, input rstn, input [WIDTH-1:0] data_in, // format : <1.6> output logic signed [WIDTH-1:0] data_out ); // coeff -3, -1.8, -7, -14, 24, 19, -62, -23, 225, 387, 225, -23, -62, 19, 24, -14, -7, 8, -1, -3 // format : <1.8> logic signed [WIDTH+9-1:0] mul_00, mul_01, mul_02, mul_03; logic signed [WIDTH+9-1:0] mul_04, mul_05, mul_06, mul_07; logic signed [WIDTH+9-1:0] mul_08, mul_09, mul_10, mul_11; logic signed [WIDTH+9-1:0] mul_12, mul_13, mul_14, mul_15; logic signed [WIDTH+9-1:0] mul_16, mul_17, mul_18, mul_19; logic signed [WIDTH+9-1:0] mul_20, mul_21, mul_22, mul_23; logic signed [WIDTH+9-1:0] mul_24, mul_25, mul_26, mul_27; logic signed [WIDTH+9-1:0] mul_28, mul_29, mul_30, mul_31; logic signed [WIDTH+9-1:0] mul_32; logic signed [WIDTH-1:0] shift_din [32:0]; integer i; always@(posedge clk or negedge rstn) begin if (~rstn) begin for(i = 32; i >= 0; i=i-1) begin shift_din[i] <= 0; end end else begin for(i = 32; i > 0; i=i-1) begin shift_din[i] <= shift_din[i-1]; end shift_din[0] <= data_in; end end always @(*) begin mul_00 = shift_din[00]*0; mul_01 = shift_din[01]*-1; mul_02 = shift_din[02]*1; mul_03 = shift_din[03]*0; mul_04 = shift_din[04]*-1; mul_05 = shift_din[05]*2; mul_06 = shift_din[06]*2; mul_07 = shift_din[07]*-2; mul_08 = shift_din[08]*2; mul_09 = shift_din[09]*0; mul_10 = shift_din[10]*-6; mul_11 = shift_din[11]*8; mul_12 = shift_din[12]*10; mul_13 = shift_din[13]*-28; mul_14 = shift_din[14]*-14; mul_15 = shift_din[15]*111; mul_16 = shift_din[16]*196; mul_17 = shift_din[17]*111; mul_18 = shift_din[18]*-14; mul_19 = shift_din[19]*-28; mul_20 = shift_din[20]*10; mul_21 = shift_din[21]*8; mul_22 = shift_din[22]*-6; mul_23 = shift_din[23]*0; mul_24 = shift_din[24]*2; mul_25 = shift_din[25]*-2; mul_26 = shift_din[26]*0; mul_27 = shift_din[27]*2; mul_28 = shift_din[28]*-1; mul_29 = shift_din[29]*0; mul_30 = shift_din[30]*1; mul_31 = shift_din[31]*-1; mul_32 = shift_din[32]*0; end logic signed [WIDTH+16-1:0] filter_sum; //always_comb begin always @(*) begin filter_sum = mul_00 + mul_01 + mul_02 + mul_03 + mul_04 + mul_05 + mul_06 + mul_07 + mul_08 + mul_09 + mul_10 + mul_11 + mul_12 + mul_13 + mul_14 + mul_15 + mul_16 + mul_17 + mul_18 + mul_19 + mul_20 + mul_21 + mul_22 + mul_23 + mul_24 + mul_25 + mul_26 + mul_27 + mul_28 + mul_29 + mul_30 + mul_31 + mul_32; end logic signed [WIDTH+8-1:0] trunc_filter_sum; assign trunc_filter_sum = filter_sum[WIDTH+16-1:8]; always_ff @(posedge clk or negedge rstn) begin if (~rstn) data_out <= 'h0; else if (trunc_filter_sum >= 63) data_out <= 63; else if (trunc_filter_sum < -64) data_out <= -64; else data_out <= trunc_filter_sum[WIDTH-1:0]; end endmodule code : tb_rrc_filter.sv `timescale 1ns/10ps module tb_rrc_filter(); logic clk, rstn; logic signed [6:0] data_in; logic signed [6:0] data_out; logic signed [6:0] adc_data_in [0:93695]; initial begin clk <= 1'b1; rstn <= 1'b0; #55 rstn <= 1'b1; // #500000 $finish; end always #5 clk <= ~clk; integer fd_adc_di; integer fd_rrc_do; integer i; int data; initial begin //always @(posedge clk) begin fd_adc_di = $fopen("./ofdm_i_adc_serial_out_fixed_30dB.txt", "r"); //fd_adc_di = $fopen("./ofdm_adc_serial_out_fixed_30dB.txt", "r"); fd_rrc_do = $fopen("./rrc_do.txt", "w"); i = 0; while (!$feof(fd_adc_di)) begin void'($fscanf(fd_adc_di,"%d\n",data)); adc_data_in[i] = data; i = i + 1; end #800000 $finish; $fclose(fd_rrc_do); end logic [23:0] adc_dcnt; always_ff @(posedge clk or negedge rstn) begin if (~rstn) adc_dcnt <= 'h0; else adc_dcnt <= adc_dcnt + 1'b1; end logic [6:0] tmp_data_in; assign tmp_data_in = adc_data_in[adc_dcnt]; logic [6:0] data_in; always_ff @(posedge clk or negedge rstn) begin if (~rstn) data_in <= 'h0; else data_in <= tmp_data_in; end always_ff @(negedge clk) begin //$fd_rrc_do = $fopen("./rrc_do.txt", "w"); $fwrite(fd_rrc_do, "%0d\n", data_out); end rrc_filter #(.WIDTH(7)) i_rrc_filter ( .clk(clk), .rstn(rstn), .data_in(data_in), .data_out(data_out) ); endmodule code : run_rcc vcs -sverilog -full64 -debug_all \ tb_rrc_filter.sv rrc_filter.sv \ -o simv && ./simv [aedu34@kccisynop2 /home/aedu34/asic_adu_red/verilog/project1] rrc_filter.sv tb_rrc_filter.sv run_rcc ofdm_i_adc_serial_out_fixed_30dB.txt source run_rcc rrc_do.txt ์์ฑ๋จ code : run_rrc_verdi vcs -full64 -sverilog -kdb -debug_access+all+reverse rrc_filter.sv tb_rrc_filter.sv ./simv -verdi & source run_rrc_verdi MATLAB C:\Users\kccistc\Documents\MATLAB rrc_do.txt Code : matlab graph y = load('rrc_do.txt'); % ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ plot(y); % ํํ ๊ทธ๋ฆฌ๊ธฐ xlabel('Sample'); ylabel('Amplitude'); title('RRC Filter Output'); grid on; Result : matlab graph Code : matlab_dump_analysis_stu.m % Created on 2025/07/02 by jihan clc; % fixed_mode = 0; % '0' = floating fixed_mode = 1; % '1' = fixed [FileName, PathName] = uigetfile('*.txt', 'select the capture binary file'); [FID, message] = fopen(FileName, 'r'); if (fixed_mode) waveform = fscanf(FID, '%d', [1 Inf]); else waveform = fscanf(FID, '%f', [1 Inf]); end Iwave = waveform(1, :); figure; pwelch(double(Iwave)); Result : matlab graph ๊ณ ์ ์์์ FIR ํํฐ์ ๋นํธํญ ๊ณ์ฐ ์ ๋ฆฌ ๐ ์ ๋ ฅ & ๊ณ์ ๋นํธํญ data ํฌ๋งท: <1.6> โ ์ด 7๋นํธ (๋ถํธ 1๋นํธ + ์์ 6๋นํธ) coeff ํฌ๋งท: <1.8> โ ์ด 9๋นํธ (๋ถํธ 1๋นํธ + ์์ 8๋นํธ) โด๏ธ ๊ณฑ์ ์ ๋นํธํญ ํ์ฅ <1.6> ร <1.8> = <2.14> 7bit ร 9bit = 16bit ์ ์๋ถ: 1๋นํธ + 1๋นํธ = 2๋นํธ ์์๋ถ: 6๋นํธ + 8๋นํธ = 14๋นํธ ๊ฒฐ๊ณผ: <2.14> = ์ด 16๋นํธ โ ๋ง์ (๋์ ) ์ ๋นํธํญ ํ์ฅ ๊ณ ์ ์์์ ๋ผ๋ฆฌ ๋ํ ๋๋ ์ ์๋ถ๊ฐ 1๋นํธ ์ฆ๊ฐํ ์ ์์ (Carry ๋ฐ์ ๋๋น) ๋์ ํด์ ๋ํ ์๋ก ์ ์๋ถ ๋นํธํญ์ ceil(log2(N))๋งํผ ๋์ด๋จ (N์ ๋ง์ ํ์ ๋๋ Tap ์) ๐ ์์ : ๊ฐ์ ๋นํธํญ <2.14> ๊ฐ์ ๋์ ํ ๊ฒฝ์ฐ Tap ์ ๋์ ๊ฒฐ๊ณผ ๋นํธํญ 2 tap <3.14> 16 tap <6.14> 32 tap <7.14> 33 tap <8.14> โป ์์๋ถ๋ ํญ์ 14๋นํธ๋ก ์ ์ง, ์ ์๋ถ๋ง ํ์ฅ๋จ ๐ค ์ถ๋ ฅ ๋ณํ ๋จ๊ณ ๋์ ๊ฒฐ๊ณผ: <8.14> โ ์ถ๋ ฅ ํฌ๋งท <1.6>์ผ๋ก ๋ณํํ๊ธฐ ์ํด ๋ค์ ์์ ์ํ: ์์๋ถ ์ ๋จ (Truncation) ํ์ 8๋นํธ(์์๋ถ)๋ฅผ ์ ๊ฑฐ <8.14> โ <8.6> ์์๋ถ 14๋นํธ โ 6๋นํธ๋ก ์ถ์ ์ ์๋ถ ํฌํ ์ฒ๋ฆฌ (Saturation) ์ถ๋ ฅ ์ ์๋ถ๋ 1๋นํธ๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฏ๋ก ๊ฐ โฅ 63 โ 63 ๊ฐ โค -64 โ -64 ์ต์ข ์ถ๋ ฅ ํฌ๋งท ๊ฒฐ๊ณผ๋ <1.6> ํ์์ผ๋ก Flip-Flop์ ์ ์ฅ๋์ด ์ถ๋ ฅ ์์ ํ โ ํต์ฌ ์์ฝ ์ฐ์ฐ ์ ์๋ถ ๋ณํ ์์๋ถ ๋ณํ ๊ณฑ์ <a.b> ร <c.d> a + c b + d ๋ง์ <a.b> + <a.b> a + 1 b ์ ์ง ๋์ ๋ง์ N๋ฒ a + ceil(log2(N)) b ์ ์ง ์ถ๋ ฅ ๋ณํ ์ ์๋ถ ์๋ผ์ ํฌํ ์์๋ถ b โ 6 1000 -> 1250 1.25G ๋ฅผ ์ฃผ๊ณ timing check (main.c) logic์ผ๋ก system verilog floating point file fix point ์์ฑ ์ฑ๋ฅ ๋ง์กฑ ์ํค๋ฉด rtl์ ์ง๊ณ ํฉ์ฑํ๊ณ gate sim๊น์ง 20์ด ๋ค์ด๊ฐ๊ณ 17ํด๋ญ ๋ค์ ๋์ด 17๋ฒ์งธ ํด๋ญ์ tcl, sdc, los ๋งคํธ๋ฉ์
Study
ยท 2025-07-16
Day2 : Synthesis
Synthesis tool : synopsis design tool simulation ๊ฒฐ๊ณผ๋ ๋์๋ Synthesis ๋์ง ์๋ ๊ฒฝ์ฐ, ๋๋ถ๋ถ ์ฝ๋ ๋ฌธ์ Synthesis ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ Timing ์ฒดํฌ -> Setup, Hold ํ๋ฆฌํ๋กญ์์ ๋์ด๊ฐ๋ clock sqew ์๊ธธ ์๋ ์์ Clock Domain Crossing (CDC)๊ณผ Metastability ๐ก Clock Domain Crossing (CDC)๋? ์๋ก ๋ค๋ฅธ ํด๋ญ ๋๋ฉ์ธ์ ์ฌ์ฉํ๋ ํ๋ก ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ํฉ ์: A ๋๋ฉ์ธ์ 100MHz, B ๋๋ฉ์ธ์ 25MHz โ ์ฃผ๊ณ ๋ฐ๋ ํ์ด๋ฐ์ด ๋ค๋ฆ ๐ด Metastability(๋ฉํ์คํ ๋น๋ฆฌํฐ)๋? ํ๋ฆฝํ๋กญ์ด ์์ ๋ ์ํ(0 ๋๋ 1)๊ฐ ์๋ ์ ๋งคํ ์ํ์ ๋น ์ง๋ ํ์ ์ฃผ๋ก setup time / hold time์ ์๋ฐํ ๋ ๋ฐ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ถ๋ ฅ์ด ์์ธก ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ๋ฆ๊ฒ ์์ ๋จ ๐ ๋์ ์ฐ๊ด์ฑ CDC ์ํฉ์์๋ ํ์ด๋ฐ์ด ๋ง์ง ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๊ธฐ ์ฝ๊ณ , ์ด๋ก ์ธํด ์์ ๋๋ฉ์ธ์ ํ๋ฆฝํ๋กญ์ด ๋ฉํ์คํ ์ด๋ธ ์ํ์ ๋น ์ง ์ ์์ ๋ฐ๋ผ์ CDC โ Metastability ์ํ ์ฆ๊ฐ ๐ ํด๊ฒฐ ๋ฐฉ๋ฒ (Synchronizer) ๋๊ธฐํ ํ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํ์คํ ๋น๋ฆฌํฐ๋ฅผ ์ํ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ 2๋จ ํ๋ฆฝํ๋กญ ๋๊ธฐํ๊ธฐ always @(posedge clk_b) begin sync1 <= async_signal; sync2 <= sync1; // ์ฌ๊ธฐ์ metastability ์ํ end ํฉ์ฑํ๋ ์ด์ ? rtl ์ฝ๋์์ ์ ๋๊ณ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ ํฉ์ฑ ์ ์๋ฌ๊ฐ ์๊ธธ ์ ์์. ํฉ์ฑ์ด ๋๋ ์ฝ๋๊ฐ ๋๋๋ก ์์ ํด์ค์ผ ํจ. ํฉ์ฑํ๊ธฐ ์ ์ rtl sim์ ๋ค์ ๋๋ ค๋ด์ผํจ run.log ํ์ผ์์ /Err, /Criticure warring ์ด ์๋ ์ผํจ ๋ง์ง๋ง gate sim์์ netlist๋ฅผ ๊ฐ๊ณ ์์ ๋๋ ธ์ ๋ rtl ๊ณผ ๊ฐ์์ผํจ. ๊ฐ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ xpro? ๊ฒ์ดํธ ๋ ๋ฒจ์์ x๊ฐ์ด ๋์ค๋ฉด ๊ฐ์ฅ ์์ ๋ฌ ์ (0๋ถํฐ)๋ฅผ ์ซ์๊ฐ์ผ๋จ. counter1_xpro ์์ ํ๊ณ ๋ค์ rtl sim syn setuo check (30~40% margin ์ฃผ๊ณ ) gate sim
Study
ยท 2025-07-15
Day1 : System Verilog Review
initial vs always ๐ข initial ์๋ฎฌ๋ ์ด์ ์๊ฐ 0์ ์์๋จ ๋ฑ ํ ๋ฒ๋ง ์คํ๋๊ณ ์ข ๋ฃ๋จ ๋ธ๋ก ์์ ์ฝ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ ์ฌ๋ฌ ๊ฐ ์์ผ๋ฉด ๋์์ ๋ณ๋ ฌ ์คํ ์ฃผ๋ก ํ ์คํธ๋ฒค์น, ์ด๊ธฐํ, ์ํ์ค ์ ์ด ๋ฑ์ ์ฌ์ฉ ๋ด๋ถ์ #10, sqen ๊ฐ์ ์ํ์ ํ๋ฆ ํํ ๊ฐ๋ฅ (์๋ฎฌ๋ ์ด์ ์ ์ฉ) โ ์: ์๋ฎฌ๋ ์ด์ ์ค ํ ๋ฒ๋ง ํน์ ๋์์ ์ํํ ๋ ๐ต always ์๋ฎฌ๋ ์ด์ ์๊ฐ 0๋ถํฐ ์์ ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ง๋ค ๊ณ์ ์คํ๋จ (์๊ตฌ ๋ฃจํ์ฒ๋ผ ๋์) ํ๋ก ๋ด ๋์์ ์ง์์ ์ผ๋ก ๊ฐ์งํ๊ฑฐ๋ ์ํํ ๋ ์ฌ์ฉ ์ค๊ณ ๋ธ๋ก๊ณผ ํ ์คํธ๋ฒค์น ๋ชจ๋์์ ์ฌ์ฉ ๊ฐ๋ฅ ํ๋์จ์ด ํฉ์ฑ ๊ฐ๋ฅ (๋๊ธฐ/์กฐํฉ ํ๋ก ๊ตฌํ) โ ์: ํด๋ญ ์ฃ์ง๋ง๋ค ๋ ์ง์คํฐ ๊ฐ์ ๊ฐฑ์ ํ๊ฑฐ๋, ์ ๋ ฅ ๋ณํ์ ๋ฐ์ โ ์์ฝ initial์ ํ ๋ฒ๋ง ์คํ โ ์ฃผ๋ก ์๋ฎฌ๋ ์ด์ ์ ์ด always๋ ๊ณ์ ๋ฐ๋ณต ์คํ โ ์ฃผ๋ก ํ๋ก ๋์ ๊ตฌํ = vs <= (Blocking vs Non-blocking) โฑ๏ธ ์๊ฐ ํ๋ฆ ์ฐจ์ด ์ ๋ฆฌ = (Blocking): ์ฆ์ ํ ๋น๋จ โ ์๊ฐ ํ๋ฆ ์์ ๋ค์ ๋ฌธ์ฅ ์คํ ์ ์ ๊ฐ์ด ๋ฐ๋ก ๋ฐ์๋จ <= (Non-blocking): ์์ฝ ํ ๋์ค์ ๋ฐ์ โ ์๊ฐ ํ๋ฆ ์์ ๊ฐ์ ์๋ฎฌ๋ ์ด์ ์ฌ์ดํด ๋ด์์ ๊ฐ์ด ๋์์ ์ ๋ฐ์ดํธ๋จ ๋น๋๊ธฐ ๋ฆฌ์ vs ๋๊ธฐ ๋ฆฌ์ (Power / Area / Cost) ๐ข ๋น๋๊ธฐ ๋ฆฌ์ (Asynchronous Reset) ๐ ์ ๋ ฅ: ๋ฎ์ โ ํด๋ญ ์์ด ์ฆ์ ๋ฆฌ์ ๋๋ฏ๋ก ์ ๋ ฅ ์๋ชจ๊ฐ ์ ์ ๐ ๋ฉด์ : ์์ โ ๋ฆฌ์ ๋ก์ง์ด ๊ฐ๋จํด์ ํ๋์จ์ด ์์ ์ ๊ฒ ์ฌ์ฉ ๐ฐ ๋น์ฉ: ๋ฎ์ โ ๊ตฌํ์ด ๋จ์ํ์ฌ ๊ฒ์ดํธ ์๊ฐ ์ ๊ณ ๋น์ฉ ์ ๊ฐ ๊ฐ๋ฅ ๐ต ๋๊ธฐ ๋ฆฌ์ (Synchronous Reset) ๐ ์ ๋ ฅ: ๋์ โ ํด๋ญ ์ ํธ๊ฐ ํ์ํ์ฌ ํด๋ญ ๊ด๋ จ ์ ๋ ฅ ์๋ชจ ๋ฐ์ ๐ ๋ฉด์ : ํผ โ ์กฐ๊ฑด ์ ์ด ๋ก์ง ์ถ๊ฐ๋ก ์ธํด ํ๋์จ์ด ์์์ด ๋ ๋ค์ด๊ฐ ๐ฐ ๋น์ฉ: ๋์ โ ๋ ผ๋ฆฌ ํ๋ก๊ฐ ๋ณต์กํด์ง๋ฉฐ ์ค๊ณ ๋ฐ ๊ตฌํ ๋น์ฉ ์ฆ๊ฐ โ ์์ฝ Async ๋ฆฌ์ : ๋ฆฌ์์ค ์ ์ฝ (์ ์ ๋ ฅ, ์ ๋ฉด์ , ์ ๋น์ฉ), ํ์ง๋ง ํ์ด๋ฐ ๋ฏผ๊ฐ๋ โ Sync ๋ฆฌ์ : ์ค๊ณ ์์ ์ฑ โ, ๊ทธ๋ฌ๋ ์์ ์๋ชจ โ ์กฐํฉ ๋ ผ๋ฆฌ vs ์์ฐจ ๋ ผ๋ฆฌ ๐ข Combinational Logic (์กฐํฉ ๋ ผ๋ฆฌ) ์ถ๋ ฅ์ด ์ ๋ ฅ์๋ง ์์กด ๋ฉ๋ชจ๋ฆฌ(์ํ ์ ์ฅ) ์์ ์์ ํด๋ญ ์ ํธ ์์ด ๋์ ์ ๋ ฅ์ด ๋ฐ๋๋ฉด ์ฆ์ ์ถ๋ ฅ๋ ๋ฐ๋ ์: ๊ฐ์ฐ๊ธฐ, ์ธ์ฝ๋, ๋์ฝ๋, ๋ฉํฐํ๋ ์ ๋ฑ assign y = a & b; ๐ต Sequential Logic (์์ฐจ ๋ ผ๋ฆฌ) ์ถ๋ ฅ์ด ์ ๋ ฅ + ์ด์ ์ํ(๋ฉ๋ชจ๋ฆฌ)์ ์์กด ๋ ์ง์คํฐ, ํ๋ฆฝํ๋กญ ๋ฑ ์ํ ์ ์ฅ ์์ ์ฌ์ฉ ํด๋ญ ์ ํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ๊ฐ ๊ฐฑ์ ๋จ ์๊ฐ ๊ฐ๋ (์์, ํ์ด๋ฐ)์ด ์ค์ ์: ๋ ์ง์คํฐ, ์นด์ดํฐ, FSM ๋ฑ always @(posedge clk) begin q <= d; end โ ์์ฝ ์กฐํฉ ๋ ผ๋ฆฌ: ํ์ฌ ์ ๋ ฅ๋ง์ผ๋ก ๊ฒฐ์ โ ๋ฉ๋ชจ๋ฆฌ ์์, ํด๋ญ ํ์ ์์ ์์ฐจ ๋ ผ๋ฆฌ: ํ์ฌ ์ ๋ ฅ + ์ด์ ์ํ๋ก ๊ฒฐ์ โ ๋ฉ๋ชจ๋ฆฌ ์์, ํด๋ญ ํ์ Equality Operator ์์ฝ โฌ ==, != x, z ๋ฌด์ ๋ชปํจ โ ๊ฒฐ๊ณผ๊ฐ x ๋ ์ ์์ ์ผ๋ฐ์ ์ธ ๊ฐ ๋น๊ต์ ์ฌ์ฉ โฌ ===, !== x, z๊น์ง ํฌํจํด์ ์ ํํ ๋น๊ต ํ ์คํธ๋ฒค์น์์ ์์ฃผ ์ฌ์ฉ โ ํต์ฌ ์ ๋ฆฌ ==, != โ ๊ฐ ๋น๊ต, x/z ์์ผ๋ฉด ๊ฒฐ๊ณผ๋ x ===, !== โ ์์ ์ผ์น ๋น๊ต, x/z ํฌํจํด์ ๋น๊ต signed vs unsigned ๐ข unsigned ๋ถํธ ์๋ ์ โ 0 ์ด์๋ง ํํ MSB(์ต์์ ๋นํธ)๋ ๊ฐ์ ์ผ๋ถ ๊ธฐ๋ณธ๊ฐ (์๋ฌด๊ฒ๋ ์ ๋ถ์ด๋ฉด unsigned) ์: 4โb1000 = 8 (์์๊ฐ ์๋) ๐ต signed ๋ถํธ ์๋ ์ โ ์์/์์ ๋ชจ๋ ํํ ๊ฐ๋ฅ MSB๋ ๋ถํธ๋นํธ๋ก ์ฌ์ฉ๋จ (0: ์์, 1: ์์) ๋น๊ต, ์ฐ์ฐ ์ signed๋ผ๋ฆฌ ๊ณ์ฐ๋์ด์ผ ์ ํํจ reg signed [3:0] a = 4'b1000; // -8 โ ์์ฝ unsigned โ 0 ์ด์๋ง ํํ, ๊ธฐ๋ณธ๊ฐ signed โ ์์๊น์ง ํํ, MSB๋ ๋ถํธ๋นํธ reg vs wire ๐ข wire ๊ฐ ์ ์ฅ X, ์ฐ๊ฒฐ์ฉ assign์ผ๋ก๋ง ๊ฐ ์ง์ ์กฐํฉ ๋ ผ๋ฆฌ ํ๋ก์ ์ฌ์ฉ ๐ต reg ๊ฐ ์ ์ฅ O, ๋ด๋ถ ์ํ ์ ์ง always, initial ๋ธ๋ก์์ ๊ฐ ํ ๋น ์์ฐจ ๋ ผ๋ฆฌ ํ๋ก์ ์ฌ์ฉ โ ์์ฝ wire: ์ ์ฅ โ, ์ฐ๊ฒฐ๋ง reg: ์ ์ฅ โญ, ๋ธ๋ก ๋ด์์ ๊ฐ ์ ์ง Clock Gating, else ์ฌ์ฉ, power ๊ด๋ จ ๐ข local clock gating ํน์ block๋ง ์ ํ์ ์ผ๋ก ํด๋ญ ๊ณต๊ธํด์ ๋์์ ์ ํ ์ฌ์ฉ ๋ชฉ์ : ๋์ ์ ํ๋ ํ๋ก์ ์ ๋ ฅ ์ฐจ๋จ โ ์ ์ ๋ ฅ ์ค๊ณ ์ง์ if (~enable)๋ก ์ฒ๋ฆฌํ๋ ๊ฒ๋ณด๋ค ๋ ํจ์จ์ ์ผ ์ ์์ ๐ต Flip-Flop (seq logic)์์ else ์ฌ์ฉ ํญ์ else๋ฅผ ์ฐ๋ ๊ฒ ์์น์ ์๋ ํ์ง๋ง always @(posedge clk)์์ if๋ง ์ฐ๊ณ else๊ฐ ์์ผ๋ฉด: ์ด์ ๊ฐ ์ ์ง ์ ๋ ์ ์์ synthesis ํด์ด latch๋ก ์คํดํ ์๋ ์์ ๋ช ํํ ์ํ ์ ์ง ๋ชฉ์ ์ผ๋ก else๋ฅผ ๋ช ์ํ๋ ๊ฒ ์ข์ โ ํ์ง๋ง ๋ถํ์ํ ์ฐ์ฐ(=ํ ๊ธ)์ด ๋ฐ์ํ ์ ์์ด โ power ์ธก๋ฉด์์ ๋ถ๋ฆฌํ ์ ์์ ๐ท Combinational Logic์์๋? always @(*)์์๋ if์ else๋ฅผ ๋ฐ๋์ ์จ์ผ ํจ โ ๋ชจ๋ ์กฐ๊ฑด์์ ์ถ๋ ฅ์ด ์ ์๋์ง ์์ผ๋ฉด latch ๋ฐ์ ์ํ latch๋ฅผ ํผํ๋ ค๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ (else ํฌํจ) ๊ฐ ์ค์ํจ โ ์์ฝ local clock gating: ํด๋ญ์ ์ฐจ๋จํด์ ์ ๋ ฅ ์ค์ด๋ ๊ธฐ๋ฒ FF์์ else: ์ํ ๋ณด์กด ๋ช ํํ ํ๋ ค๋ฉด ์ข์ง๋ง, ๋ถํ์ํ ์ ๋ ฅ ์๋ชจ ์ฃผ์ combinational์์ else ๋๋ฝ: latch ๋ฐ์ ๊ฐ๋ฅ์ฑ ์์ โ ๋ฐ๋์ ์ฒ๋ฆฌ ํ์ Quiz 1 ์ด ์ฝ๋๋ ํฉ๋ฒ์ ์ธ๊ฐ? ์ปดํ์ผ์ด ๋ ๊น? program automatic test; bit [31:0] count; logic [31:0] Count = 'x; initial begin count = Count; $display("Count = %0x count = %0d", Count, count); end endprogram: test ๋ต๋ณ : ํฉ๋ฒ์ ์ธ SystemVerilog ์ฝ๋์ด๋ฉฐ ์ปดํ์ผ๋ ๊ฐ๋ฅํจ. program automatic์ ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ ๊ตฌ์กฐ์ด๊ณ ๋ฌธ๋ฒ์ ์ผ๋ก ๋ฌธ์ ์์. logic ํ์ ์ ์ด๋ค ํ์ ์ ๋ค๋ฅธ ์ด๋ฆ์ธ๊ฐ? โx๋ Count๋ฅผ ์ด๋ป๊ฒ ์ด๊ธฐํํ๋๊ฐ? ๋ต๋ณ : logic์ 4-state ํ์ ์ธ reg์ ๋์ฒด ํํ โ 0, 1, x, z ์ ์ฅ ๊ฐ๋ฅ. โx๋ ๋ชจ๋ ๋นํธ๋ฅผ unknown(x) ๊ฐ์ผ๋ก ์ด๊ธฐํํจ. ํ๋ก๊ทธ๋จ์ ๋ฌด์์ ์ถ๋ ฅํ ๊น? ์ count์ Count์ ๊ฐ์ด ๋ค๋ฅธ๊ฐ? ์ถ๋ ฅ ์์ : Count = xxxxxxxx count = 0 (ํ์์ ์ผ๋ก ํํ) ์ด์ : Count๋ logic์ด๋ฏ๋ก โx ๊ฐ์ ์ ์งํจ. count๋ bit ํ์ ์ด๋ผ 2-state๋ง ๊ฐ๋ฅ โ x ๊ฐ์ 0์ผ๋ก ๊ฐ์ ๋ณํํด์ ์ ์ฅ๋จ shift_reg
Study
ยท 2025-07-14
<
>
Touch background to close